iT邦幫忙

2022 iThome 鐵人賽

DAY 17
0
自我挑戰組

初入Swift新手村的旅程系列 第 17

Day17 Swift 結構

  • 分享至 

  • xImage
  •  

結構 Struct

在程式開發中,結構用來描述一種事物的結構,在Swift中結構與類十分相似,都可以定義屬性、也可以定義方法,但不像類一樣具有繼承的屬性。

在Swift中使用struct關鍵字來定義結構體,結狗體中可以宣告變數或是常數作為結構體的屬性,也可以建立函數作為結構體的方法,結構體可以呼叫其中的屬性或是方法。

struct Car {
    // 宣告三個屬性 分別為 價格 品牌 油量
    var price: Int
    var brand: String
    var pertorl: Int
    // 定義一個路線方法
    mutating func drive() {
        if pertorl > 0{
            pertorl -= 1
            print("drive 10 mile")
        }
    }
    // 定義一個加油的方法
    mutating func addPetrol() {
        pertorl += 10
        print("plus 10")
    }
}

上面描述了汽車這樣的事務,並提供了三個屬性,兩個方法,在建立結構體後會默認生成一個構造方法,來讓開發者使用,開發者可以在構造方法中完成的對結構體的實作。

// 建立一個汽車結構體,價格、品牌、初始油量
var car = Car(price: 100000, brand: "BMW", pertorl: 10)
// 使用點語法來獲取car實例的屬性
print("\(car.brand) + \(car.price) + \(car.pertorl)")
// 模擬汽車的加油行為
for _ in 0...10 {
    if car.pertorl == 0 {
        car.addPetrol()
    }else{
        // 進行行走路線行為
        car.drive()
    }
}

上面透過結構體來模擬現實生活中的汽車,需要注意的是在Swift中資料型別分為值類型和引用類型,結構以及列舉都屬於值類型,只有類是引用類型,兩者最大的區別在於當進行數據傳遞時,值類型總是被複製,而引用類型不會被複製,後面會解釋這個部分,如果值類型有資料傳遞,原來的實例會被複製一份,修改的實例不會修改到原始的實例。

// 建立一個汽車結構體,價格、品牌、初始油量
var car = Car(price: 100000, brand: "BMW", pertorl: 10)
// 使用點語法來獲取car實例的屬性
print("(car.brand) + (car.price) + (car.pertorl)")
var car2 = car
car2.price = 50000
print("Price: \(car.price) Price: \(car2.price)")
// 將印出 Price: 100000 Price: 50000

接下來,是類 Class 的介紹


上一篇
Day16 Swift 列舉
下一篇
Day18 Swift 類
系列文
初入Swift新手村的旅程30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言